package com.codefish;

public class OperationalCharacter0523 {
    public static void main(String[] args) {

     /*

     运算符：进行特定操作的符号。例如：+
     表达式：用运算符练起来的式子叫做表达式。例如：20+5.又例如：a+b

         四则运算
         加：+
         减：-
         乘：*
         除：/

         被除数 / 除数 = 商...余数

         取模(取余数)：%



     */

        //两个常量之间可以进行数学运算
        System.out.println(20+30); //50

        //两个变量之间也可以进行数学运算
        int a = 20;
        int b = 30;
        System.out.println(a-b);  //-10

        //变量和常量之间可以混合使用
        System.out.println(a*10);  //200

        //对于一个整数的表达式来说，除法用的是整除，整数除以整数，结果仍然是整数，只看商，不看余数。
        int x = 10;
        int y = 3;

        int result1 = x / y;
        System.out.println(result1); //3

        //只有对于整数的除法来说，取模运算符才有余数的意义。 %
        int result2 = x % y;
        System.out.println(result2); //余数，模，1

        //一旦运算当中有不同类型的数据，那么结果将会是数据类型范围大的那种。
        //int + double --> double + double = double
        double result3 = x + 2.5;
        System.out.println(result3); //12.5

        System.out.println("=====================================");

        /*
        四则运算当中的加号“+”有常见的三种用法；

        1.对于数值来说，那就是加法。
        2.对于字符char类型来说，在计算之前，char会被提升成为int,然后再计算。
        char类型字符，和int类型水，之间的关系对照表：ASCII、Unicode
        3.对于字符串String(首字母大写，并不是关键字)；来说，加号代表字符串连续操作。

         */

        //字符串类型的变量基本使用

        //数据类型 变量名称 = 数据值；
        String str1 = "Hello";
        System.out.println(str1); //Hello
        System.out.println("Hello"+"World"); //HelloWorld

        //String + int -->String
        String str2 = "Java";
        System.out.println(str2 + 20); //Java20

        //优先级问题

        //String + int + int = String + int = String
        System.out.println(str2 + 20 + 30); //Java2030

        //String + (int + int)
        System.out.println(str2 + (20 + 30));//Java50

        System.out.println("=====================================");


        /*
        自增运算符：++
        自减运算符：--
        基本含义：让一个变量涨一个数字1，或者让一个变量降一个数字1
        使用格式：写在变量名称之前，或者写在变量名称之后。例如：++num,也可以num++
        使用方式：
        1.单独使用：不和其他任何操作混合，自己独立成为一个步骤。
        2.混合使用：和其他操作混合，例如与赋值混合，或者与打印操作混合，等。
        使用区别：
        1.在单独使用的时候，前++和后++没有任何区别。也就是：++num;和num++；是完全一样的。
        2.在混合使用的时候，有 重大区别
          A.如果是前++，那么变量立马+1，然后拿着结果进行使用。
          B.如果是后++，那么首先使用变量本来的数值，然后再让变量+1。
        注意事项：
        只有变量才能使用自增、自减运算符。常量不可发生改变，所以不能用。


         */

        int num1 = 10;
        System.out.println(num1); //10

        //单独使用
        ++num1; //前++
        System.out.println(num1); //11

        num1++; //后11

        System.out.println(num1); //12

        System.out.println("=====================================");

        //与打印操作混合的时候
        int num2 = 20;
        System.out.println(++num2); //混合使用，先++，变量立刻马上变成21，然后打印结果21
        System.out.println(num2);

        System.out.println("=====================================");

        //混合使用，后++，首先使用变量本来的30，然后再让变量+1得到31
        int num3 = 30;
        System.out.println(num3++); //30
        System.out.println(num3); //31

        System.out.println("=====================================");

        int num4 = 40;
        //和赋值操作混合
        int result4 = --num4; //混合使用，前--，变量立马-1变成39，然后将结果交给result4变量
        System.out.println(result4); //39
        System.out.println(num4); //39

        System.out.println("=====================================");

        int num5 = 50;
        //混合使用，后--，首先把本来的数字50交给result2,然后再变成49
        int result5 = num5--; //混合使用，前--，变量立马-1变成39，然后将结果交给result4变量
        System.out.println(result5); //50
        System.out.println(num5); //49

        System.out.println("=====================================");

        int x1 = 10;
        int y1 = 20;
        int result6 = ++x1 + y1--;// x1 = 11  ; 11 + 20 = 31 ;  y1 = 19
        System.out.println(result6);//31
        System.out.println(x1);//11
        System.out.println(y1);//19

        // 30++； 错误写法，常量不可使用自增自减运算符。


        System.out.println("=====================================");

        /*
        赋值运算符分为：
        基本赋值运算符：就是一个等号“=”，代表将右侧的数据交给左侧的变量。
        int a = 30;
        复合赋值运算符：
        +=     a += 1  相当于  a = a + 1
        -=     b -= 2  相当于  b = b - 2
        *=     c *= 3  相当于  c = c * 3
        /=     d /= 4  相当于  d = d / 4
        %=     e %= 5  相当于  e = e % 5

        注意事项：
        1.只有变量才能使用赋值运算符，常量不能进行赋值。
        2.复合赋值运算符其中隐含了一个强制类型转换。
         */

        int a1 = 10;
        a1 += 5; // a1 = a1 + 5;  10 = 10 + 5 ;  a1 = 15
        System.out.println(a1); // 15

        int x2 = 10;
        x2 %= 3;// x2 = x2 % 3 ; x2 = 10 % 3 ; x2 = 1
        System.out.println(x2); // 1

        // 50 = 30; 常量不能进行赋值，不能写在赋值运算符的左边，错误写法！

        byte num6 = 30;
        //byte + int = int + int = int
        //num6 = (byte)int
        num6 +=5;
        System.out.println(num6);// 35

        System.out.println("=====================================");

     /*
        比较运算符：
        大于： >
        小于： <
        大于等于： >=
        小于等于： <=
        相等: ==  （两个等号连写才是相等，一个等号代表的是赋值）
        不相等： ！=

        注意事项：
        1.比较运算符的结果一定是一个Boolean值，成立就是true，不成立就是false
        2.如果进行多次判断，不能连着写
        数学当中的写法，例如：1<x<3  程序当中 不允许 这种写法
      */

        System.out.println(10>5); //true
        int num7 = 10;
        int num8 = 12;
        System.out.println(num7 < num8); //true
        System.out.println(num8 >= 100); //false
        System.out.println(num8 <= 100); //true
        System.out.println(num8 <= 12); //true

        System.out.println("=====================================");

        System.out.println(10 == 10);//true
        System.out.println(20 != 25);//true
        System.out.println(20 != 20);//false

        int x3 = 2;
        //System.out.println(1< x3 < 3);  错误写法！不能连着写

        System.out.println("=====================================");

        /*
        逻辑运算符
        与(并且)  &&  全都是true。才是true；否则就是false
        或(或者)  ||  至少一个是true,就是True;全都是false,才是false
        非(取反)  !   本来是true,变成false;本来是false,变成true

        与"&&",或"||"，具有短路效果：如果根据左边已经可以判断得到最终结果，那么右边的代码将不再执行，从而节省一定的性能。

        注意事项：
        1.逻辑运算符只能用于Boolean值。
        2.与、或需要左右格子有一个Boolean值，但是取反只要有唯一的一个Boolean值即可。
        3.与、或两种运算符，如果有多个条件，可以连续写
        两个条件：条件A && 条件B
        多个条件：条件A && 条件B && 条件C

        tips:
        对于1 < x < 3的情况，应该拆成两个部分，然后使用与运算符连接起来：
        int x = 2;
        1 < x & x < 3;



         */

        System.out.println(true && false); // false
        System.out.println(true && true); // true

        System.out.println(3 < 4 && 10 > 5); // true

        System.out.println("=====================================");

        System.out.println(true || false); //true
        System.out.println(true || true); //true
        System.out.println(false || false); //false

        System.out.println("=====================================");

        System.out.println(true); //true
        System.out.println(!true); //false
        System.out.println(!false); //true

        System.out.println("=====================================");

        int a2 = 10;
        System.out.println(3 > 4 && ++a < 100); //false
        System.out.println(a2); //10

        int b2 = 20;
        System.out.println(3 < 4 || ++b < 100); //true
        System.out.println(b2); //20

        System.out.println("=====================================");

        /*
        一元运算符：只需要一个数据就可以进行操作的运算符。例如：取反！、自增++、自减--
        二元运算符：需要两个数据才可以操作的运算符。例如：加法+、赋值=
        三元运算符：需要三个数据才可以进行操作的运算符
        格式：
        数据类型 变量名称 = 条件判断 ？ 表达A : 表达式B；

        流程：
        首先判断条件是否成立:
          如果成立为true，那么将表达式A的值赋值给左侧的变量；
          如果不成立为false。那么将表达式B的值赋值给左侧的变量；
        二者选其一。

        注意事项：
        1.必须同时保证表达式A和表达式B都符合左侧数据类型的要求。
        2.三元运算符的结果必须被使用。


         */

        int a3 = 10;
        int b3 = 20;

        //数据类型 变量名称 = 条件判断 ？ 表达A : 表达式B；
        //判断a>b是否成立，如果成立将a的值赋值给max;如果不成立将b的值赋值给max.二者选其一
        int max = a3 > b3 ? a3 : b3;
        System.out.println(max); //false ; max = b3 ; 20

        //int result = 3 > 4 ? 2.5 : 10;  错误写法！不符合左侧数据类型的要求

        System.out.println(a3 > b3 ? a3 : b3); //20  正确写法！要么赋值  要么打印

        //a3 > b3 ? a3 : b3 错误写法！不是语句














    }

}
